/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.jSkyRoom.bridge.major;

import ru.jSkyRoom.interfaces.major.Perk;
import ru.jSkyRoom.interfaces.major.Spell;
import ru.jSkyRoom.interfaces.stub.EquipSlot;
import skyproc.FormID;
import skyproc.MagicItem;
import skyproc.SPEL;
import skyproc.genenums.CastType;
import skyproc.genenums.DeliveryType;

/**
 *
 * @author Rakev
 */
public class SpellBridge extends MagicItemBridge<SPEL> implements Spell {

    public SpellBridge(SPEL adapting) {
        super(adapting);
    }

    @Override
    public EquipSlot getEquipSlot() {
        FormID id = getRawObject().getEquipSlot();
        return getFinderFactory().createEquipSlotFinder().find(id);
    }

    @Override
    public void setEquipSlot(EquipSlot slot) {
        FormID id = getIdProducer().produce(slot);
        getRawObject().setEquipSlot(id);
    }

    @Override
    public int getBaseCost() {
        return getRawObject().getBaseCost();
    }

    @Override
    public void setBaseCost(int baseCost) {
        getRawObject().setBaseCost(baseCost);
    }

    @Override
    public boolean getFlag(MagicItem.SPELFlag flag) {
        return getRawObject().get(flag);
    }

    @Override
    public void setFlag(MagicItem.SPELFlag flag) {
        getRawObject().set(flag, true);
    }

    @Override
    public void unsetFlag(MagicItem.SPELFlag flag) {
        getRawObject().set(flag, false);
    }

    @Override
    public SPEL.SPELType getSpellType() {
        return getRawObject().getSpellType();
    }

    @Override
    public void setSpellType(SPEL.SPELType type) {
        getRawObject().setSpellType(type);
    }

    @Override
    public float getChargeTime() {
        return getRawObject().getChargeTime();
    }

    @Override
    public void setChargeTime(float chargeTime) {
        getRawObject().setChargeTime(chargeTime);
    }

    @Override
    public CastType getCastType() {
        return getRawObject().getCastType();
    }

    @Override
    public void setCastType(CastType type) {
        getRawObject().setCastType(type);
    }

    @Override
    public DeliveryType getDeliveryType() {
        return getRawObject().getDeliveryType();
    }

    @Override
    public void setDeliveryType(DeliveryType type) {
        getRawObject().setDeliveryType(type);
    }

    @Override
    public float getCastDuration() {
        return getRawObject().getCastDuration();
    }

    @Override
    public void setCastDuration(float duration) {
        getRawObject().setCastDuration(duration);
    }

    @Override
    public float getRange() {
        return getRawObject().getRange();
    }

    @Override
    public void setRange(float range) {
        getRawObject().setRange(range);
    }

    @Override
    public Perk getPerk() {
        FormID id = getRawObject().getPerkRef();
        return getFinderFactory().createPerkFinder().find(id);
    }

    @Override
    public void setPerk(Perk perk) {
        FormID id = getIdProducer().produce(perk);
        getRawObject().setPerkRef(id);
    }
}
